﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using MDK;
using MDK.Physics;
using ZedGraph;
using System.Windows.Forms;

namespace TestGraph
{
    public class SomePhysicsClass : GraphicPrimitive
    {
        double x0, x1;
        
        public SomePhysicsClass()
            : base(0, 0, new Size())
        {
            this.Needs = ExperimentNeeds.Graph;
            AddParametersToTemplate();
        }

        public SomePhysicsClass(int Left, int Top, Size Size)
            : base(Left, Top, Size)
        {
            this.Needs = ExperimentNeeds.Graph;
            
            // передаём размеры
            this.Left = Left;
            this.Top = Top;

            this.Size = Size;

            //создаём список по умолчанию
            AddParametersToTemplate();
        }

        public override ExperimentAbout GetAbout()
        {
            return new ExperimentAbout("TestGraph",
                                        "Тест для ExperimentNeeds.Graph",
                                        "Тест для ExperimentNeeds.Graph");
        }


        double Ze2;
        double T;
        private void AddParametersToTemplate()
        {
            ParameterListTemplate = new ParameterList();

            ParameterListTemplate.Add("X-начальное", "X0", 0);
            ParameterListTemplate.Add("X-конечное", "X1", 100);
            ParameterListTemplate.Add("Ze^2", "Ze2", 47);
            ParameterListTemplate.Add("T", "T", 5);
        }


        public override void SetParameters(ParameterList pList)
        {
            // todo: получить параметры из pList во "внутренние" переменные 
            x0 = pList["X0"];
            x1 = pList["X1"];
            Ze2 = pList["Ze2"];
            T = pList["T"];
        }

        public override void SetGraphInfo(GraphPane pane)
        {
            pane.Title.Text = "d(sigma)/d(omega) от theta";
            pane.XAxis.Title.Text = "theta";
            pane.YAxis.Title.Text = "d(sigma)/d(omega)";
        }

        public override PointPairList GetPoints()
        {
            PointPairList points = new PointPairList();
            double y, x;
            
            for (x = x0; x < x1; x+=0.01)
            {
                if (x >= 2 * Math.PI - 0.05 && x <= 2 * Math.PI + 0.05) continue; 
                y = Math.Pow((Ze2/(2*T)), 2)*Math.Pow(Math.Cos(x/2)/Math.Sin(x/2), 2);
                points.Add(x, y);
            }
            
            /* интерполируем
            for (int i = 0; i < points.Count; i++)
            {
                points[i].Y = points.InterpolateX(i);
            }*/
            return points;
        }
        public override ParameterList GetParameters()
        {
            ParameterList RetList = ParameterListTemplate;

            //todo: в RetList заносим "внутренние" переменные

            return RetList;
        }

        public override PointPairList GetResults()
        {
            // todo: возвращаем результаты для статистики
            return new PointPairList();
        }

        /// <summary>
        /// Метод рисования
        /// </summary>
        /// <param name="e"></param>
        public override void Draw(System.Windows.Forms.PaintEventArgs e)
        {
            //Ваше рисование здесь!
        }


    }
}
